import axios from "axios";
import store from "@/store";
import router from "@/router";

// 导出基准地址，原因：其他地方不是通过axios发请求的地方用上基准地址
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'

const instance =axios.create({
    baseURL,
    // 设置超时5秒
    timeout:5000
})

// 请求拦截器
instance.interceptors.request.use(config => {
    // 1.获取用户的信息
    const {profile} =store.state.user
    // 2.判断是否存在token
    if(profile.token){
    // 3.设置token
    config.headers.Authorization = `Bearer ${profile.token}`
    }
    return config

},error=>{
    return Promise.reject(error)
})

// 响应拦截器
instance.interceptors.response.use(res=>res.data,error=>{
   // 401状态码，进入该函数
   if(error.response && error.response.status===401){
   // 1.清空本地无效信息 ,给传递空对象
   store.commit('user/setUser',{})

   const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
   // 2.跳转到登录页码
   router.push('/login?redirectUrl='+fullPath)
   // 3.跳转需要传参(当前路由地址)给登录页码
  
   }

  return Promise.reject(error)
})


// 请求工具函数
export default (url,method,submitData)=>{
    // 负责发请求 :请求地址，请求方式，提交的数据
    return instance({
        url,
        method,
        // 如果是get请求  需要使用params来传递submitData
        // 如果是其他请求  需要使用data来传递submitData
        // [] 设置一个动态的key，写js表达式
        [method.toLowerCase() === 'get'?'params':'data']:submitData
    })
}